<html>
<head>
<title>Remake de Fruity Frank - Version 0.16</title>
<style type="text/css">
span {
	font-family: 'Courier New';
	font-size: 10pt;
	color: #000000;
}
.SpanClass0 {
	color: #808080;
}
.SpanClass3 {
	color: #008080;
}
.SpanClass5 {
	font-weight: bold;
	color: #0000FF;
}
.SpanClass7 {
	color: #808080;
}
.SpanClass10 {
	font-weight: bold;
	color: #000080;
}
.SpanClass11 {
}
</style>
</head>
<body bgcolor="#FFFFFF">
<h2>Remake (parcial) de Fruity Frank... 16 - Un fuente m&aacute;s modular</h2>
<p align="right">(Volver al <a href="doc.html">&iacute;ndice</a>) </p>

<p>Nuestro fuente empieza a tener un cierto tama&ntilde;o. Para ganar en legibilidad, va siendo el momento de hacer un peque&ntilde;o replanteamiento, para convertirlo en algo m&aacute;s modular.</p>

<p>El &quot;Main&quot; del programa ya era razonablemente breve. S&oacute;lo le vamos a a&ntilde;adir una llamada a funci&oacute;n &quot;inicializar&quot;, que sea la que se encargue de cargar las im&aacute;genes, tipos de letra, etc (las variables se declarar&aacute;n antes, al principio del programa, como veremos un poco m&aacute;s adelante):</p>

<pre><code>public static void Main ()
{
    Juego juego = new Juego();
    // Primero inicializo (variables, im&aacute;genes, etc)
    juego.inicializar();
    // Despu&eacute;s, pantalla de presentacion
    juego.presentacion();
    // Y luego, la partida en s&iacute;
    juego.buclePrincipal();
}</code></pre>

<p>Por su parte, el bucle de juego (la funci&oacute;n &quot;buclePrincipal&quot;), deber&iacute;a ser mucho m&aacute;s modular de lo que era, y m&aacute;s legible. Resultar&iacute;a m&aacute;s f&aacute;cil de mantener se pareciera m&aacute;s a la idea intuitiva de lo que debe hacer cada &quot;pasada&quot; de nuestro juego: dibujar la pantalla, comprobar qu&eacute; teclas pulsa el usuario (y actuar en consecuencia), comprobar colisiones entre elementos del juego, y calcular la nueva posici&oacute;n de los dem&aacute;s elementos del juego (por ahora, s&oacute;lo nuestros enemigos), por ejemplo as&iacute;:</p>

<pre><code>do {
    dibujarPantalla();
    comprobarTeclas();
    comprobarColisiones();
    moverEnemigos();
    // Pausa de 40 ms, para velocidad de 25 fps (1000/40 = 25)
    Pausa(40);
    // Fin de la parte repetitiva
} while (! TeclaPulsada (TECLA_ESC));</code></pre>

<p>Eso s&iacute;, estas funciones comparten informaci&oacute;n entre ellas. Podr&iacute;amos hacer que esa informaci&oacute;n se pasara como par&aacute;metros, o bien que simplemente se tratase de &quot;variables globales&quot; (realmente, atributos de nuestra clase &quot;Juego&quot;), que declaremos antes que todas las funciones:</p>

<pre><code>// Constantes que se usar&aacute;n en el juego
const int NUMENEMIGOS = 5;
// Tipos de enemigos
const int TIPOENEMIGOPEPINO = 1;
const int TIPOENEMIGONARIZ = 2;

// Variables auxiliares para bucles
short i;
// Limites de la pantalla
short xIniPantalla = 12, xFinPantalla = 638;
short yIniPantalla = 82, yFinPantalla = 448;</code></pre>

<p>A partir de ahora, los cambios que se acercan afectar&aacute;n menos a otras partes del juego. Se tratar&aacute; de cambios como: como perder vidas cuando choquemos con un enemigo, un movimiento m&aacute;s inteligente de estos enemigos, poder &quot;disparar&quot;, que ciertos obst&aacute;culos sean m&oacute;viles, que haya un tabla de records, etc.</p>

<p>Para m&aacute;s detalles, puedes ver el estado del proyecto en: <a href="http://code.google.com/p/fruityfrank"> code.google.com/p/fruityfrank</a></p>
<p align="right">(Volver al <a href="doc.html">&iacute;ndice</a>) </p>
</body>
</html>
